{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# DeepOnet-Grid"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "本工作构建了一个高效的网络DeepONet-Grid，用于对故障后的电力系统进行动态安全分析，该网络\n",
    "\n",
    "`\n",
    "(i) 接收故障前和故障期间收集的轨迹作为输入，并且\n",
    "(ii) 输出预测的故障后轨迹。\n",
    "`\n",
    "\n",
    "此外，本网络还通过不确定性量化（Uncertainty Quantification）为其方法赋予了在效率与可靠/可信预测之间取得平衡的能力。\n",
    "\n",
    "原始论文：[DeepONet-grid-UQ: A trustworthy deep operator framework for predicting the power grid’s post-fault trajectories](!https://www.sciencedirect.com/science/article/abs/pii/S0925231223002503)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 研究背景与动机\n",
    "\n",
    "电力系统作为关键基础设施，其稳定性和可靠性对现代社会至关重要。然而，电网经常面临罕见但严重的故障和扰动，这些事件可能导致系统不稳定，甚至引发大规模停电。\n",
    "\n",
    "传统的动态安全分析需要求解复杂的非线性微分代数方程组，计算成本极高，难以实现实时分析。随着电网的转型，电力公司迫切需要能够进行近实时的动态安全评估。\n",
    "\n",
    "现有的机器学习方法主要关注二分类问题（稳定/不稳定），缺乏对故障后轨迹的定量预测能力。系统运营商和规划者需要了解故障后各种状态变量的轨迹，以评估电压或频率是否会违反预定义限制并触发负荷切除等保护措施。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 方法细节\n",
    "\n",
    "#### 工作原理\n",
    "\n",
    "DeepONet-Grid-UQ基于深度算子网络（Deep Operator Network）理论，其核心思想是将电力系统故障后的动态行为建模为一个算子映射问题：\n",
    "\n",
    "- **输入函数空间**：故障前和故障期间的轨迹数据 u(t) ∈ U\n",
    "- **输出函数空间**：故障后预测轨迹 y(t) ∈ Y\n",
    "- **算子映射**：G: U → Y\n",
    "\n",
    "该网络学习从输入轨迹到输出轨迹的非线性映射关系，即：\n",
    "y(t) = G[u](t)\n",
    "\n",
    "#### 网络架构设计\n",
    "\n",
    "图1： 网络结构图\n",
    "![网络架构图](images/arch.png)\n",
    "DeepONet采用分支-主干（Branch-Trunk）架构：\n",
    "\n",
    "**分支网络（Branch Network）**：\n",
    "\n",
    "- 输入：故障前和故障期间的轨迹序列 u(t₁), u(t₂), ..., u(tₙ)\n",
    "- 功能：提取输入轨迹的特征表示\n",
    "- 输出：特征向量 b ∈ ℝᵖ\n",
    "\n",
    "**主干网络（Trunk Network）**：\n",
    "\n",
    "- 输入：时间点 t\n",
    "- 功能：学习时间基函数\n",
    "- 输出：时间特征向量 τ(t) ∈ ℝᵖ\n",
    "\n",
    "**输出计算**：\n",
    "\n",
    "G[u](t) = ⟨b, τ(t)⟩ = Σᵢ₌₁ᵖ bᵢτᵢ(t)\n",
    "\n",
    "其中 ⟨·,·⟩ 表示内积运算。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 不确定性量化方法\n",
    "\n",
    "原始工作介绍了两种不确定性量化方法，本工作只实现了概率DeepONet（Prob-DeepONet）不确定性量化方法：\n",
    "\n",
    "**1. 贝叶斯DeepONet (B-DeepONet)**：\n",
    "\n",
    "- 使用随机梯度哈密顿蒙特卡洛（SGHMC）采样\n",
    "- 从网络参数的后验分布中采样：θ ∼ p(θ|D)\n",
    "- 预测不确定性通过多次前向传播获得：\n",
    "\n",
    "y(t) = ∫ G[u](t; θ) p(θ|D) dθ\n",
    "\n",
    "**2. 概率DeepONet (Prob-DeepONet)**：\n",
    "\n",
    "- 网络同时输出预测均值 μ(t) 和预测标准差 σ(t)\n",
    "- 假设输出服从高斯分布：y(t) ∼ N(μ(t), σ²(t))\n",
    "- 损失函数采用负对数似然：\n",
    "\n",
    "L = -log p(y|μ, σ) = -log N(y; μ, σ²)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "实践前，确保已经正确安装最新版本的MindSpore。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "DeepOnet-grid实现分为以下6个步骤：\n",
    "\n",
    "1. 配置网络与训练参数\n",
    "2. 数据集加载\n",
    "3. 模型构建\n",
    "4. 模型训练\n",
    "5. 结果可视化\n",
    "6. 模型推理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "import numpy as np\n",
    "import mindspore as ms\n",
    "from mindspore import context\n",
    "from src.model import ProbDeepONet\n",
    "from src.data import load_real_data, prepare_deeponet_data, split_data, create_datasets, trajectory_prediction\n",
    "from src.metrics import MetricsCalculator\n",
    "from src.trainer import create_trainer\n",
    "from src.utils import plot_pred_uq"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "==================================================\n",
      "DeepONet-Grid-UQ MindSpore Configuration\n",
      "==================================================\n",
      "Configuration:\n",
      "  Sensors (m): 33\n",
      "  Time points (q): 100\n",
      "  Basis functions: 100\n",
      "  Network width: 200\n",
      "  Network depth: 3\n",
      "  Learning rate: 5e-05\n",
      "  Batch size: 1024\n",
      "  Epochs: 1\n"
     ]
    }
   ],
   "source": [
    "# ===================================\n",
    "# Configuration Parameters\n",
    "# ===================================\n",
    "print(\"=\" * 50)\n",
    "print(\"DeepONet-Grid-UQ MindSpore Configuration\")\n",
    "print(\"=\" * 50)\n",
    "\n",
    "# General Parameters\n",
    "verbose = True # Whether to output detailed information\n",
    "seed = 1234\n",
    "\n",
    "# DeepONet parameters (based on your data)\n",
    "m = 33                    # Number of sensors (voltage data)\n",
    "q = 100                   # Number of time points\n",
    "n_basis = 100             # Number of basis functions\n",
    "branch_type = \"modified\"  # Branch network type\n",
    "trunk_type = \"modified\"   # Trunk network type\n",
    "width = 200               # Network width\n",
    "depth = 3                 # Network depth\n",
    "activation = \"sin\"        # Activation function\n",
    "\n",
    "# Training parameters\n",
    "learning_rate = 5e-5      # Learning rate\n",
    "batch_size = 1024           # Batch size\n",
    "n_epochs = 1            # Number of epochs (for demo)\n",
    "\n",
    "# Learning scheduler\n",
    "scheduler = \"cosine\"\n",
    "min_lr = 1e-7             # Minimum learning rate\n",
    "max_lr = 1e-3             # Maximum learning rate\n",
    "total_step = 10000        # Total number of steps\n",
    "step_per_epoch = 1000     # Number of steps per epoch\n",
    "decay_epoch = 10        # Number of epochs for decay\n",
    "loss_type = \"nll\"         # Loss function type: \"nll\" (negative log likelihood)\n",
    "optimizer = \"adam\"        # Optimizer\n",
    "weight_decay = 0.0        # Weight decay\n",
    "amp_level = \"O0\"          # Mixed precision level: \"O0\", \"O1\", \"O2\"\n",
    "\n",
    "print(\"Configuration:\")\n",
    "print(f\"  Sensors (m): {m}\")\n",
    "print(f\"  Time points (q): {q}\")\n",
    "print(f\"  Basis functions: {n_basis}\")\n",
    "print(f\"  Network width: {width}\")\n",
    "print(f\"  Network depth: {depth}\")\n",
    "print(f\"  Learning rate: {learning_rate}\")\n",
    "print(f\"  Batch size: {batch_size}\")\n",
    "print(f\"  Epochs: {n_epochs}\")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "==================================================\n",
      "Setting up MindSpore device and context\n",
      "==================================================\n"
     ]
    }
   ],
   "source": [
    "print(\"\\n\" + \"=\" * 50)\n",
    "print(\"Setting up MindSpore device and context\")\n",
    "print(\"=\" * 50)\n",
    "\n",
    "# Set random seed\n",
    "np.random.seed(seed)\n",
    "ms.set_seed(seed)\n",
    "\n",
    "# Set up device context\n",
    "context.set_context(mode=context.PYNATIVE_MODE, device_target=\"Ascend\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "==================================================\n",
      "Loading training and test data\n",
      "==================================================\n",
      "Loading training data from: data/trustworthydatasetv2/train-data-voltage-m-33-Q-100-mix.npz\n",
      "Training data shapes: u=(77069, 33), y=(77069, 100), s=(77069, 100)\n",
      "Loading test data from: data/trustworthydatasetv2/test-data-voltage-m-33-mix.npz\n",
      "Test data shapes: u=(8564, 33), y=(8564, 100), s=(8564, 100)\n"
     ]
    }
   ],
   "source": [
    "# ===================================\n",
    "# Load training and test data\n",
    "# ===================================\n",
    "print(\"\\n\" + \"=\" * 50)\n",
    "print(\"Loading training and test data\")\n",
    "print(\"=\" * 50)\n",
    "\n",
    "# Define data paths\n",
    "train_path = \"data/trustworthydatasetv2/train-data-voltage-m-33-Q-100-mix.npz\"\n",
    "test_path = \"data/trustworthydatasetv2/test-data-voltage-m-33-mix.npz\"\n",
    "\n",
    "# Check if files exist\n",
    "if not os.path.exists(train_path):\n",
    "    print(f\"Training data not found: {train_path}\")\n",
    "    print(\"Please check the data path or use synthetic data\")\n",
    "\n",
    "if not os.path.exists(test_path):\n",
    "    print(f\"Test data not found: {test_path}\")\n",
    "    print(\"Please check the data path\")\n",
    "\n",
    "# Load training data\n",
    "print(f\"Loading training data from: {train_path}\")\n",
    "u_train, y_train, s_train = load_real_data(train_path)\n",
    "print(f\"Training data shapes: u={u_train.shape}, y={y_train.shape}, s={s_train.shape}\")\n",
    "\n",
    "# Load test data\n",
    "print(f\"Loading test data from: {test_path}\")\n",
    "u_test, y_test, s_test = load_real_data(test_path)\n",
    "print(f\"Test data shapes: u={u_test.shape}, y={y_test.shape}, s={s_test.shape}\")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "==================================================\n",
      "Preparing data for DeepONet training\n",
      "==================================================\n",
      "Preparing training data...\n",
      "Expanded training data: u=(7706900, 33), y=(7706900, 1), s=(7706900, 1)\n",
      "Preparing test data...\n",
      "Expanded test data: u=(856400, 33), y=(856400, 1), s=(856400, 1)\n",
      "Splitting data...\n",
      "Creating MindSpore datasets...\n",
      "Created datasets: ['train', 'val', 'test']\n"
     ]
    }
   ],
   "source": [
    "# ===================================\n",
    "#  Prepare data for DeepONet\n",
    "# ===================================\n",
    "print(\"\\n\" + \"=\" * 50)\n",
    "print(\"Preparing data for DeepONet training\")\n",
    "print(\"=\" * 50)\n",
    "\n",
    "# Prepare training data (expand multi-time-point to single query points)\n",
    "print(\"Preparing training data...\")\n",
    "u_train_expanded, y_train_expanded, s_train_expanded, train_metadata = prepare_deeponet_data(u_train, y_train, s_train)\n",
    "print(f\"Expanded training data: u={u_train_expanded.shape}, y={y_train_expanded.shape}, s={s_train_expanded.shape}\")\n",
    "\n",
    "# Prepare test data\n",
    "print(\"Preparing test data...\")\n",
    "u_test_expanded, y_test_expanded, s_test_expanded, test_metadata = prepare_deeponet_data(u_test, y_test, s_test)\n",
    "print(f\"Expanded test data: u={u_test_expanded.shape}, y={y_test_expanded.shape}, s={s_test_expanded.shape}\")\n",
    "\n",
    "\n",
    "# Split data, only use 10% of data for training for demo\n",
    "print(\"Splitting data...\")\n",
    "data_splits = split_data(\n",
    "    u_train_expanded, y_train_expanded, s_train_expanded,\n",
    "    train_ratio=0.1, val_ratio=0.5, test_ratio=0.4\n",
    ")\n",
    "\n",
    "# Create MindSpore datasets\n",
    "print(\"Creating MindSpore datasets...\")\n",
    "datasets = create_datasets(data_splits, batch_size=batch_size)\n",
    "print(f\"Created datasets: {list(datasets.keys())}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "==================================================\n",
      "Building Probabilistic DeepONet model\n",
      "==================================================\n",
      "Model created successfully\n",
      "Branch network: [33, 200, 200, 200, 100]\n",
      "Trunk network: [1, 200, 200, 200, 100]\n"
     ]
    }
   ],
   "source": [
    "# ===================================\n",
    "# Build Probabilistic DeepONet\n",
    "# ===================================\n",
    "print(\"\\n\" + \"=\" * 50)\n",
    "print(\"Building Probabilistic DeepONet model\")\n",
    "print(\"=\" * 50)\n",
    "\n",
    "# Model configuration\n",
    "dim = 1  # Trunk input dimension (always 1 for DeepONet)\n",
    "\n",
    "# Branch configuration\n",
    "branch_config = {\n",
    "    \"type\": branch_type,\n",
    "    \"layer_size\": [m] + [width] * depth + [n_basis],  # [input] + [width] * depth + [output]\n",
    "    \"activation\": activation\n",
    "}\n",
    "\n",
    "# Trunk configuration\n",
    "trunk_config = {\n",
    "    \"type\": trunk_type,\n",
    "    \"layer_size\": [dim] + [width] * depth + [n_basis],  # [input] + [width] * depth + [output]\n",
    "    \"activation\": activation\n",
    "}\n",
    "\n",
    "# Create model\n",
    "model = ProbDeepONet(branch_config, trunk_config, use_bias=True)\n",
    "\n",
    "print(\"Model created successfully\")\n",
    "print(f\"Branch network: {branch_config['layer_size']}\")\n",
    "print(f\"Trunk network: {trunk_config['layer_size']}\")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "==================================================\n",
      "Creating trainer and training configuration\n",
      "==================================================\n",
      "Trainer created successfully\n"
     ]
    }
   ],
   "source": [
    "# ===================================\n",
    "# Create trainer and training configuration\n",
    "# ===================================\n",
    "print(\"\\n\" + \"=\" * 50)\n",
    "print(\"Creating trainer and training configuration\")\n",
    "print(\"=\" * 50)\n",
    "\n",
    "# Training configuration\n",
    "config = {\n",
    "    'model': {\n",
    "        'm': m,\n",
    "        'dim': dim,\n",
    "        'width': width,\n",
    "        'depth': depth,\n",
    "        'n_basis': n_basis,\n",
    "        'branch_type': branch_type,\n",
    "        'trunk_type': trunk_type,\n",
    "        'activation': activation,\n",
    "        'use_bias': True\n",
    "    },\n",
    "    'training': {\n",
    "        'batch_size': batch_size,\n",
    "        'epochs': n_epochs,\n",
    "        'log_interval': 100,\n",
    "        'eval_interval': 1000,\n",
    "        'scheduler': scheduler,\n",
    "        'min_lr': min_lr,\n",
    "        'max_lr': max_lr,\n",
    "        'total_step': total_step,\n",
    "        'step_per_epoch': step_per_epoch,\n",
    "        'decay_epoch': decay_epoch,\n",
    "        'verbose': verbose,\n",
    "        'loss_type': 'nll',\n",
    "        'optimizer': 'adam',\n",
    "        'weight_decay': 0.0\n",
    "    },\n",
    "    'output': {\n",
    "        'save_dir': 'outputs',\n",
    "        'save_best': True\n",
    "    }\n",
    "}\n",
    "\n",
    "# Create trainer\n",
    "trainer = create_trainer(model, config, save_dir='outputs', distributed=0)\n",
    "print(\"Trainer created successfully\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "==================================================\n",
      "Initial test (before training)\n",
      "==================================================\n",
      "Testing on 10 samples...\n",
      "Initial test - Mean prediction shape: (1024, 1)\n",
      "Initial test - Log std prediction shape: (1024, 1)\n"
     ]
    }
   ],
   "source": [
    "# ===================================\n",
    "# Initial test (before training)\n",
    "# ===================================\n",
    "print(\"\\n\" + \"=\" * 50)\n",
    "print(\"Initial test (before training)\")\n",
    "print(\"=\" * 50)\n",
    "\n",
    "# Test on a small subset\n",
    "n_test_samples = 10\n",
    "print(f\"Testing on {n_test_samples} samples...\")\n",
    "\n",
    "# Get a small batch for testing\n",
    "test_batch = next(datasets['test'].create_dict_iterator())\n",
    "u_test_batch, y_test_batch, s_test_batch = test_batch['u'], test_batch['y'], test_batch['s']\n",
    "\n",
    "# Forward pass\n",
    "mean_pred, log_std_pred = model(u_test_batch, y_test_batch)\n",
    "print(f\"Initial test - Mean prediction shape: {mean_pred.shape}\")\n",
    "print(f\"Initial test - Log std prediction shape: {log_std_pred.shape}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "***** Probabilistic Training for 100 epochs *****\n",
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "==================================================\n",
      "Starting training\n",
      "==================================================\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/100:  Train-Loss: 0.304765 Best-Loss: inf \n",
      "Epoch 2/100:  Train-Loss: -0.038343 Best-Loss: -0.128458 \n",
      "Epoch 3/100:  Train-Loss: -0.143670 Best-Loss: -0.128458 \n",
      "Epoch 4/100:  Train-Loss: 0.264705 Best-Loss: -0.176884 \n",
      "Epoch 5/100:  Train-Loss: -0.220248 Best-Loss: -0.176884 \n",
      "...\n",
      "Epoch 97/100:  Train-Loss: -0.482196 Best-Loss: -0.482104 \n",
      "Epoch 98/100:  Train-Loss: -0.482205 Best-Loss: -0.482124 \n",
      "Epoch 99/100:  Train-Loss: -0.482214 Best-Loss: -0.482124 \n",
      "Epoch 100/100:  Train-Loss: -0.482224 Best-Loss: -0.482124 \n",
      "\n",
      "Training completed!"
     ]
    }
   ],
   "source": [
    "# ===================================\n",
    "# Training\n",
    "# ===================================\n",
    "print(\"\\n\" + \"=\" * 50)\n",
    "print(\"Starting training\")\n",
    "print(\"=\" * 50)\n",
    "\n",
    "# Train the model\n",
    "history = trainer.train(\n",
    "    train_dataset=datasets['train'],\n",
    "    val_dataset=datasets['val']\n",
    ")\n",
    "\n",
    "print(\"Training completed!\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "==================================================\n",
      "Evaluation and testing\n",
      "==================================================\n",
      "Evaluating on test set...\n",
      "Test Results:\n",
      "  MSE: 0.003331\n",
      "  MAE: 0.024189\n",
      "  R2: 0.271197\n",
      "  L1_RELATIVE_ERROR: 0.024222\n",
      "  L2_RELATIVE_ERROR: 0.057664\n",
      "  FRACTION_IN_CI: 0.975315\n",
      "  TRAJECTORY_L1_ERROR: 0.024222\n",
      "  TRAJECTORY_L2_ERROR: 0.057664\n"
     ]
    }
   ],
   "source": [
    "# ===================================\n",
    "# Evaluation and testing\n",
    "# ===================================\n",
    "print(\"\\n\" + \"=\" * 50)\n",
    "print(\"Evaluation and testing\")\n",
    "print(\"=\" * 50)\n",
    "\n",
    "# Evaluate on test set\n",
    "print(\"Evaluating on test set...\")\n",
    "test_metrics = trainer.evaluate(datasets['test'])\n",
    "\n",
    "print(\"Test Results:\")\n",
    "for metric, value in test_metrics.items():\n",
    "    print(f\"  {metric.upper()}: {value:.6f}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "def predict_and_plot(u_single, y_single, s_true, model):\n",
    "    predictions, std_predictions = trajectory_prediction(\n",
    "        u_single, y_single, model)\n",
    "    s_mean = predictions.reshape(-1)\n",
    "    s_std = std_predictions.reshape(-1)\n",
    "\n",
    "    calculator = MetricsCalculator()\n",
    "    targets = ms.Tensor(s_true, ms.float32)\n",
    "    predicts = ms.Tensor(predictions, ms.float32)\n",
    "\n",
    "    # Test L1 and L2 relative errors\n",
    "\n",
    "    l1_error, l2_error = calculator.trajectory_rel_error(targets, predicts)\n",
    "    metrics_text = f\"L1: {l1_error:.4f} L2: {l2_error:.4f}\"\n",
    "    print(metrics_text)\n",
    "\n",
    "    test_y = [i+len(u_single) for i in range(len(targets))]\n",
    "\n",
    "    plot_pred_uq(\n",
    "        sensors=np.arange(u_single.shape[0]),\n",
    "        u=u_single,\n",
    "        y=test_y,\n",
    "        s=s_true,\n",
    "        s_mean=s_mean,\n",
    "        s_std=s_std,\n",
    "    )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "==================================================\n",
      "Trajectory prediction and uncertainty quantification\n",
      "==================================================\n",
      "Testing trajectory prediction...\n",
      "Predicting trajectories at 100 time points...\n",
      "L1: 0.0026 L2: 0.0027\n"
     ]
    },
    {
     "data": {
      "image/png": "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RIrC8ENERESKwvBDREREisLwQ0RERIrC8ENERESKwvBDREREisLwQ0RERIrC8ENERESKwvBDREREisLwQ0RERIrC8ENERESKwvBDREREisLwQ0RERIrC8ENERESKwvBDREREisLwQ0RERIrC8ENERESKwvBDREREisLwQ0RERIrC8ENERESKwvBDREREisLwQ0RERIrC8ENERESKwvBDREREisLwQ0RERIrC8ENERESKwvBDREREisLwQ0RERIrC8ENERESKwvBDREREisLwQ0RERIrC8ENERESKwvBDREREisLwQ0RERIrC8ENERESKwvBDREREisLwQ0RERIrC8ENERESKwvBDREREisLwQ0RERIrC8ENERESKwvBDREREimJj6Q48qnQ6HXJzcy3dDaIax9bWFmq12tLdIKIajOGnnIQQuHnzJu7fv2/prhDVWHXq1IGHhwckSbJ0V4ioBmL4KSdD8GnQoAFq1arFP85EZiSEQEZGBlJTUwEAnp6eFu4REdVEDD/loNPp5ODj6upq6e4Q1UgODg4AgNTUVDRo0ICHwIjI7HjCczkYzvGpVauWhXtCVLMZfsd4Xh0RVQWGnwrgoS6iqsXfMSKqSgw/REREpCgMP0RERKQoDD8KERYWhuHDh1fre27atAl16tSp1vckIiL6Oww/REREpCgMPwrUq1cvTJ8+Ha+++irq1asHDw8PLFy40KhGkiSsWbMGgwYNgoODA/z9/bF9+3Z5/oEDByBJktHFHuPi4iBJEq5evYoDBw5g/Pjx0Gq1kCQJkiSZvAcREZElMPyYycOHD/Hw4UMIIeS2nJwcPHz4ENnZ2cXW6vV6uS03NxcPHz5EVlbW39aaw2effQZHR0ecOHECy5Ytw1tvvYXo6GijmjfffBPPPvsszp49i7Fjx+KFF15AQkJCmdYfHByMVatWwdnZGSkpKUhJScHs2bPNug1EREQVwfBjJk5OTnBycsLt27fltuXLl8PJyQkvvfSSUW2DBg3g5OSE5ORkuW316tVwcnLCxIkTjWr9/Pzg5ORU5tBRVm3btsWCBQvQrFkzhIaGIigoCPv27TOqGTlyJCZNmoTmzZvj7bffRlBQED766KMyrd/Ozg4uLi6QJAkeHh7w8PCAk5OTWbeBiIioIhh+FKpt27ZG056envItBQy6du1qMm3uEEZERFTdeHsLM0lP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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# ===================================\n",
    "# Trajectory prediction and UQ\n",
    "# ===================================\n",
    "print(\"\\n\" + \"=\" * 50)\n",
    "print(\"Trajectory prediction and uncertainty quantification\")\n",
    "print(\"=\" * 50)\n",
    "model.set_train(False)\n",
    "\n",
    "# Test trajectory prediction\n",
    "print(\"Testing trajectory prediction...\")\n",
    "\n",
    "# Select a test sample for trajectory prediction\n",
    "test_path = \"data/test-data-voltage-m-33-mix.npz\"\n",
    "u, y, s = load_real_data(test_path)\n",
    "\n",
    "\n",
    "# Predict trajectories\n",
    "data_index = 1100\n",
    "u_single = u[data_index]\n",
    "y_single = y[data_index]\n",
    "s_true = s[data_index]\n",
    "\n",
    "print(f\"Predicting trajectories at {len(y_single)} time points...\")\n",
    "\n",
    "predict_and_plot(u_single, y_single, s_true, model)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "L1: 0.0063 L2: 0.0078\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "data_index = 560\n",
    "u_single = u[data_index]\n",
    "y_single = y[data_index]\n",
    "s_true = s[data_index]\n",
    "predict_and_plot(u_single, y_single, s_true, model)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "L1: 0.1121 L2: 0.1238\n"
     ]
    },
    {
     "data": {
      "image/png": "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fQsiIiIip6l1+CmbK/HQQw8BsN+GYPPmzXjqqacwePDgWhdIRERE5Ew3fJ2f6shkMgwfPhxfffUVLl265OzdExEREdVKrcOPzWarcn3v3r2xc+fO2u6eiIiIyKlqPezl5+eHTp06oWvXroiLi0PXrl3Rtm1bHDhwAMXFxc6okYiIiMhpah1+EhIScOTIERw5cgRLlizBmTNnYLPZIJPJ8MorrzijRiIiIiKncfpd3Q0GA86ePYvg4GBEREQ4c9f1gqe6ExER3Xzq/a7u5Xl5eaFjx47O3i0RERGRU9zQhOf09PTrap+ZmXkjb0NERETkdDcUfnr27InJkyfjwIED1bbRarX45JNP0KlTJyQkJNxwgURERETOdEPDXikpKXj99ddx5513QqVSIT4+HlFRUfDy8kJBQQFOnDiB48ePIz4+Hm+++SaGDx/u7LqJiIiIbkitJjwbDAZs2rQJe/bswfnz56HX6xESEoJu3brhjjvuQKdOnZxZa73ghGciIqKbz/V8fzv9bK+bHcMPERHRzed6vr+dfnsLIiIiInfG8ENEREQe5YbCz4IFC5xcBhEREVH9uKHws2HDBmfXQURERFQvrutU95iYGMhkMmRmZiI2NrbS9g4dOuCnn35yWnFEREREznZd4SctLQ0A0K1bNyQlJdVJQURERER16YaGvXr37u3sOoiIiIjqxQ2Fn2XLljm7DiIiIqJ6wVPdiYiIyKPUOvyMHz8eK1eulJ5fuHABP//8M7RabW13TUREROR0tQ4/W7ZsQbt27QAABQUF6N69O+6991506NABp06dqnWBRERERM5U6/Cj1WrRtGlTAMC6desQFRUFrVaLsWPHYu7cubUukIiIiMiZah1+oqOjpVPgExISMH78eKjVakyePBn79u2rdYFEREREznRd1/mpyoQJE/Dkk09i5MiR+PXXX7FkyRIAgNVqRXFxca0LJCIiInKmWoefuXPnQgiBX375BYsWLUKrVq0AAAcPHkSzZs1qXSARERGRM9U6/MhkMsybNw/z5s1zWH/58mWMHTu2trsnIiIicqpah5/qzJ49u652TURERHTDeJFDIiIi8igMP0RERORRGH6IiIjIo7h9+Fm6dCliYmLg5eWFHj16YM+ePddsbzQaMW/ePDRv3hwajQYtW7bEihUr6qlaIiIicnd1NuHZGdauXYsZM2Zg6dKl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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "data_index = 803\n",
    "u_single = u[data_index]\n",
    "y_single = y[data_index]\n",
    "s_true = s[data_index]\n",
    "predict_and_plot(u_single, y_single, s_true, model)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "INFO:src.trainer:Model saved to: outputs/final_model.ckpt\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "==================================================\n",
      "Saving results\n",
      "==================================================\n",
      "Training history saved to: outputs/training_history.json\n",
      "Test results saved to: outputs/test_results.json\n",
      "Final model saved to: outputs/final_model.ckpt\n",
      "\n",
      "==================================================\n",
      "DeepONet-Grid-UQ MindSpore example completed successfully!\n",
      "==================================================\n"
     ]
    }
   ],
   "source": [
    "# ===================================\n",
    "# Save results\n",
    "# ===================================\n",
    "print(\"\\n\" + \"=\" * 50)\n",
    "print(\"Saving results\")\n",
    "print(\"=\" * 50)\n",
    "\n",
    "# Save training history\n",
    "import json\n",
    "history_path = os.path.join('outputs', 'training_history.json')\n",
    "with open(history_path, 'w', encoding=\"utf-8\") as f:\n",
    "    json.dump(history, f, indent=2)\n",
    "print(f\"Training history saved to: {history_path}\")\n",
    "\n",
    "# Save test results\n",
    "test_results_path = os.path.join('outputs', 'test_results.json')\n",
    "with open(test_results_path, 'w', encoding=\"utf-8\") as f:\n",
    "    json.dump(test_metrics, f, indent=2)\n",
    "print(f\"Test results saved to: {test_results_path}\")\n",
    "\n",
    "# Save model\n",
    "trainer.save_model('final_model.ckpt')\n",
    "print(\"Final model saved to: outputs/final_model.ckpt\")\n",
    "\n",
    "print(\"\\n\" + \"=\" * 50)\n",
    "print(\"DeepONet-Grid-UQ MindSpore example completed successfully!\")\n",
    "print(\"=\" * 50)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "ms25_py310",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
